From: Keir Fraser Date: Mon, 6 Jul 2009 10:46:22 +0000 (+0100) Subject: x86: Process only pending timers in acpi idle handler, not all X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~13651 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22?a=commitdiff_plain;h=ae9820b4b04e7c0896aca3d74f375441388f3cc4;p=xen.git x86: Process only pending timers in acpi idle handler, not all softirqs. This fixes a bug where bailing into SCHEDULE_SOFTIRQ may not actually return. From: Ke Yu Signed-off-by: Keir Fraser --- diff --git a/xen/arch/x86/acpi/cpu_idle.c b/xen/arch/x86/acpi/cpu_idle.c index 4d591c857e..98d642f975 100644 --- a/xen/arch/x86/acpi/cpu_idle.c +++ b/xen/arch/x86/acpi/cpu_idle.c @@ -225,13 +225,8 @@ static void acpi_processor_idle(void) cpufreq_dbs_timer_suspend(); sched_tick_suspend(); - /* - * sched_tick_suspend may raise TIMER_SOFTIRQ by __stop_timer, - * which will break the later assumption of no sofirq pending, - * so add do_softirq - */ - if ( softirq_pending(smp_processor_id()) ) - do_softirq(); + /* sched_tick_suspend() can raise TIMER_SOFTIRQ. Process it now. */ + process_pending_timers(); /* * Interrupts must be disabled during bus mastering calculations and